Transactions in DynamoDB

Database Tutorials - ডাইনামোডিবি (DynamoDB)
213
213

Transactions in DynamoDB হল একটি গুরুত্বপূর্ণ ফিচার যা ডেটাবেস অপারেশনগুলিকে একত্রিত করে এবং একযোগে সফল বা ব্যর্থ (Atomic) হতে সহায়ক। এটি বিশেষত গুরুত্বপূর্ণ যখন আপনি নিশ্চিত করতে চান যে একাধিক রিড এবং রাইট অপারেশন একই সময়ে সফল বা ব্যর্থ হবে, যেন ডেটা একরকমভাবে সিঙ্ক্রোনাইজড থাকে। DynamoDB-র ট্রানজেকশন ফিচারটি ACID (Atomicity, Consistency, Isolation, Durability) সাপোর্ট করে, যা অ্যাপ্লিকেশনের ডেটা নিরাপত্তা এবং সঙ্গতি নিশ্চিত করে।

DynamoDB-তে ট্রানজেকশন এর মাধ্যমে আপনি একাধিক রিড এবং রাইট অপারেশন একত্রে করতে পারেন, এবং যদি কোনো একটি অপারেশন ব্যর্থ হয়, তবে পুরো ট্রানজেকশনই ব্যর্থ হবে। এতে ডেটার সঠিকতা এবং এক্সাক্ট স্টেট নিশ্চিত করা যায়।


DynamoDB Transaction এর মূল ধারণা

  1. Atomicity:
    • ট্রানজেকশন অ্যাটমিক থাকে, অর্থাৎ সমস্ত অপারেশন একযোগে সফল অথবা একযোগে ব্যর্থ হবে। এর ফলে, ডেটাবেসটি কিছু ডেটা আপডেট হওয়ার পরে অসম্পূর্ণ অবস্থায় পড়ে না।
  2. Consistency:
    • ট্রানজেকশন শেষ হওয়ার পর, ডেটাবেসটি সবসময় একটি সঙ্গত (consistent) অবস্থায় থাকবে। ট্রানজেকশন ব্যর্থ হলে, ডেটাবেসে কোনও আংশিক পরিবর্তন থাকবে না।
  3. Isolation:
    • একাধিক ট্রানজেকশন একে অপরের থেকে বিচ্ছিন্নভাবে কার্যকর হয়। এক ট্রানজেকশনের পরিবর্তন অন্য ট্রানজেকশন দ্বারা প্রভাবিত হবে না যতক্ষণ না ট্রানজেকশনটি সম্পূর্ণভাবে কনফার্ম করা না হয়।
  4. Durability:
    • ট্রানজেকশন সফল হলে, এর ফলাফল স্থায়ী হয় এবং সিস্টেমের ক্র্যাশ বা অন্য কোনো সমস্যা থেকেও এই ডেটা হারিয়ে যাবে না।

DynamoDB Transactional API

DynamoDB ট্রানজেকশন পরিচালনা করতে দুটি প্রধান API প্রদান করে:

  1. TransactWriteItems:
    • একাধিক রাইট অপারেশন একযোগে সম্পন্ন করার জন্য ব্যবহৃত হয়।
    • এই API দিয়ে আপনি একাধিক PutItem, UpdateItem, DeleteItem অপারেশনকে একটি ট্রানজেকশনের মধ্যে রাখতে পারেন।
  2. TransactGetItems:
    • একাধিক রিড অপারেশন একযোগে সম্পন্ন করার জন্য ব্যবহৃত হয়।
    • এই API দিয়ে আপনি একাধিক GetItem অপারেশনকে একটি ট্রানজেকশনের মধ্যে রাখতে পারেন।

DynamoDB ট্রানজেকশন অপারেশন উদাহরণ

TransactWriteItems উদাহরণ (Put, Update, Delete)

import boto3

# DynamoDB ক্লায়েন্ট তৈরি
dynamodb = boto3.client('dynamodb')

# ট্রানজেকশন রাইট অপারেশন
response = dynamodb.transact_write_items(
    TransactItems=[
        {
            'Put': {
                'TableName': 'Users',
                'Item': {
                    'UserID': {'S': '123'},
                    'Name': {'S': 'John Doe'},
                    'Age': {'N': '30'}
                }
            }
        },
        {
            'Update': {
                'TableName': 'Users',
                'Key': {'UserID': {'S': '456'}},
                'UpdateExpression': 'SET Age = :val1',
                'ExpressionAttributeValues': {
                    ':val1': {'N': '32'}
                }
            }
        },
        {
            'Delete': {
                'TableName': 'Users',
                'Key': {'UserID': {'S': '789'}}
            }
        }
    ]
)

print("Transaction Successful:", response)

এটি একযোগে তিনটি অপারেশন সম্পাদন করবে:

  • PutItem: নতুন একটি আইটেম যোগ করবে।
  • UpdateItem: বিদ্যমান আইটেমের Age ফিল্ড আপডেট করবে।
  • DeleteItem: একটি আইটেম মুছে ফেলবে।

TransactGetItems উদাহরণ (GetItems)

import boto3

# DynamoDB ক্লায়েন্ট তৈরি
dynamodb = boto3.client('dynamodb')

# ট্রানজেকশন রিড অপারেশন
response = dynamodb.transact_get_items(
    TransactItems=[
        {
            'Get': {
                'TableName': 'Users',
                'Key': {'UserID': {'S': '123'}}
            }
        },
        {
            'Get': {
                'TableName': 'Users',
                'Key': {'UserID': {'S': '456'}}
            }
        }
    ]
)

# রেসপন্স থেকে ডেটা প্রিন্ট
for item in response['Responses']:
    print(item)

এটি একযোগে দুটি GetItem অপারেশন চালাবে এবং দুইটি ব্যবহারকারীর তথ্য ফিরিয়ে আনবে।


DynamoDB Transaction Limitations

DynamoDB ট্রানজেকশনগুলির কিছু সীমাবদ্ধতা রয়েছে:

  1. Maximum 25 Items per Transaction:
    • একটী ট্রানজেকশনে সর্বোচ্চ 25টি রাইট অপারেশন বা 25টি রিড অপারেশন করতে পারবেন।
  2. Maximum Item Size:
    • প্রতিটি আইটেমের মাপ 400 KB এর মধ্যে থাকতে হবে। এটি কোন একটি ট্রানজেকশন অপারেশনে অ্যাক্সেস করা আইটেমের জন্য প্রযোজ্য।
  3. Latency and Cost:
    • ট্রানজেকশন ব্যবহার করলে কিছুটা লেটেন্সি বাড়তে পারে, এবং এতে খরচও বাড়ে। তবে এটি নির্ভর করবে আপনার অপারেশনগুলির ধরণ এবং সংখ্যার উপর।

উপসংহার

DynamoDB ট্রানজেকশন একটি শক্তিশালী টুল, যা অ্যাটমিক রিড এবং রাইট অপারেশন নিশ্চিত করতে সাহায্য করে। এটি ACID প্রিন্সিপলের উপর ভিত্তি করে এবং ডেটা এক্সাক্টনেস এবং ইন্টিগ্রিটি রক্ষা করতে ব্যবহৃত হয়। আপনি যখন একাধিক ডেটাবেস অপারেশন একযোগে করতে চান এবং নিশ্চিত করতে চান যে সেগুলি একযোগে সফল বা ব্যর্থ হবে, তখন ট্রানজেকশন ব্যবহার করা উচিত।

common.content_added_by

Transactions কী এবং কিভাবে কাজ করে?

197
197

DynamoDB Transactions একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে একাধিক রিড এবং রাইট অপারেশন একযোগভাবে (atomic) সম্পাদন করতে দেয়। এটি ACID (Atomicity, Consistency, Isolation, Durability) গ্যারান্টি প্রদান করে, যার মাধ্যমে ডেটাবেসে একাধিক অপারেশন একযোগে নিরাপদ এবং সঠিকভাবে সম্পাদিত হয়।

যখন আপনি একাধিক রিড বা রাইট অপারেশনকে একসাথে একত্রে কার্যকর করতে চান, তখন Transactions ব্যবহার করা হয়। এটি ডেটা একসাথে আপডেট, রিড, অথবা ডিলিট করার একটি কার্যকর পদ্ধতি, যাতে আপনি পুরো কার্যক্রমকে একটি একক লেনদেন (transaction) হিসেবে বিবেচনা করতে পারেন।


DynamoDB Transactions এর মূল ধারণা:

  1. Atomicity: সব অপারেশন একত্রে সফল বা ব্যর্থ হবে। অর্থাৎ, যদি একটি অপারেশন ব্যর্থ হয়, তবে অন্যান্য অপারেশনও ব্যর্থ হবে এবং কোনও পরিবর্তন ডেটাবেসে প্রতিফলিত হবে না।
  2. Consistency: ডেটাবেসটি সর্বদা একটি সঠিক এবং প্রসঙ্গগত অবস্থায় থাকবে, যার ফলে ডেটার অবস্থা সর্বদা সঠিক থাকে।
  3. Isolation: একটি লেনদেনের মধ্যে করা পরিবর্তন অন্য লেনদেনের প্রভাব থেকে বিচ্ছিন্ন থাকবে। অন্য লেনদেনগুলো চলতে থাকলেও প্রথম লেনদেনের পরিবর্তন পরবর্তী পর্যন্ত দৃশ্যমান হবে না।
  4. Durability: লেনদেন সফলভাবে সম্পন্ন হলে, পরিবর্তনগুলি অবশিষ্ট থাকবে এবং পরবর্তী সিস্টেম ক্র্যাশ বা ডাউনটাইমে হারিয়ে যাবে না।

DynamoDB Transactions কিভাবে কাজ করে?

DynamoDB Transactions দুটি প্রধান API প্রদান করে:

  1. TransactWriteItems: এটি একাধিক রাইট অপারেশন (Put, Update, Delete) একযোগভাবে করার জন্য ব্যবহৃত হয়।
  2. TransactGetItems: এটি একাধিক রিড অপারেশন একযোগে করার জন্য ব্যবহৃত হয়।

TransactWriteItems উদাহরণ:

import boto3
from botocore.exceptions import ClientError

# DynamoDB client তৈরি
dynamodb = boto3.client('dynamodb')

# TransactWriteItems API কল করা
try:
    response = dynamodb.transact_write_items(
        TransactItems=[
            {
                'Put': {
                    'TableName': 'Users',
                    'Item': {
                        'UserID': {'S': '12345'},
                        'Name': {'S': 'John Doe'},
                        'Age': {'N': '30'}
                    }
                }
            },
            {
                'Update': {
                    'TableName': 'Accounts',
                    'Key': {
                        'AccountID': {'S': '67890'}
                    },
                    'UpdateExpression': 'SET Balance = Balance + :val',
                    'ExpressionAttributeValues': {
                        ':val': {'N': '100'}
                    }
                }
            }
        ]
    )
    print("Transaction succeeded:", response)
except ClientError as e:
    print("Transaction failed:", e)

TransactGetItems উদাহরণ:

import boto3

# DynamoDB client তৈরি
dynamodb = boto3.client('dynamodb')

# TransactGetItems API কল করা
response = dynamodb.transact_get_items(
    TransactItems=[
        {
            'Get': {
                'TableName': 'Users',
                'Key': {
                    'UserID': {'S': '12345'}
                }
            }
        },
        {
            'Get': {
                'TableName': 'Accounts',
                'Key': {
                    'AccountID': {'S': '67890'}
                }
            }
        }
    ]
)

# রিড ফলাফল দেখানো
for item in response['Responses']:
    print(item)

Transactions এর প্রধান সুবিধা:

  1. Atomicity নিশ্চিত করা: একাধিক অপারেশন সম্পাদন করার সময়, যেকোনো একটি অপারেশন ব্যর্থ হলে, সমস্ত অপারেশন ব্যর্থ হবে এবং ডেটাবেসের অবস্থা অপরিবর্তিত থাকবে।
  2. ডেটার সঙ্গতি নিশ্চিত করা: একাধিক রাইট অপারেশন একযোগে করা হলে, ডেটা সঠিক এবং সম্মিলিত থাকে।
  3. কমপ্লেক্স ডেটাবেস অপারেশন: একাধিক টেবিল বা আইটেমের মধ্যে পরিবর্তন করতে চাইলে, এটি খুবই কার্যকর।
  4. ডিস্ট্রিবিউটেড লেনদেন: একাধিক টেবিলের উপর লেনদেন পরিচালনা করা যায়, যা সাধারণ রিড এবং রাইট অপারেশনের তুলনায় শক্তিশালী।

Limitations of Transactions in DynamoDB:

  1. Throughput Constraints: DynamoDB transactions একটি নির্দিষ্ট থ্রুপুট সীমাবদ্ধতা নিয়ে আসে, অর্থাৎ আপনার টেবিলের সেটিংস অনুযায়ী throughput-এর পরিমাণ সীমিত থাকতে পারে।
  2. Maximum Item Size: প্রতি আইটেমের জন্য 400 KB এর সীমা রয়েছে, এবং একাধিক আইটেমের ট্রানজেকশন করতে পারলেও প্রতিটি আইটেমের আকার এই সীমার মধ্যে থাকতে হবে।
  3. Cost Considerations: Transactions ব্যবহার করার জন্য অতিরিক্ত খরচ হতে পারে, কারণ আপনি একযোগে একাধিক রাইট এবং রিড অপারেশন করতে পারেন।
  4. Limited Operations: শুধু Put, Update, Delete, এবং Get অপারেশনগুলি ট্রানজেকশনে ব্যবহার করা যায়। অন্যান্য কিছু অপারেশন যেমন Query বা Scan ব্যবহার করা যায় না।

সারাংশ:

DynamoDB Transactions অত্যন্ত শক্তিশালী এবং স্কেলেবল টুল যা আপনার অ্যাপ্লিকেশনকে একাধিক রিড/রাইট অপারেশন একযোগে করার সুযোগ দেয়, যা ডেটার সঙ্গতি এবং নিরাপত্তা বজায় রাখে। আপনি যখন একাধিক টেবিল বা আইটেমে কাজ করছেন এবং আপনার লেনদেনটি অ্যাটমিক এবং সঠিক হওয়া প্রয়োজন, তখন এটি ব্যবহারের জন্য একটি আদর্শ পদ্ধতি।

common.content_added_by

Transactional Reads এবং Writes

270
270

DynamoDB তে Transactional Reads এবং Writes এমন একটি ক্ষমতা যা আপনাকে একাধিক রেকর্ড (Items) একত্রে, সম্পূর্ণভাবে এবং সঠিকভাবে আপডেট, রিড, বা ডিলিট করতে সক্ষম করে। এটি অ্যাপ্লিকেশনগুলির জন্য গুরুত্বপূর্ণ যখন ACID (Atomicity, Consistency, Isolation, Durability) ট্রানজেকশন নিশ্চিত করা প্রয়োজন, বিশেষত একাধিক ডেটা পয়েন্ট বা রেকর্ডের পরিবর্তন একযোগে সম্পাদন করার সময়।

Transactional Reads এবং Writes এর মাধ্যমে আপনি ডেটার ইন্টিগ্রিটি বজায় রাখতে পারেন এবং একটি ট্রানজেকশন অপারেশনের সবগুলো রিড বা রাইট অ্যাকশন একযোগে সফলভাবে সম্পন্ন করতে পারেন অথবা ব্যর্থ হলে সমস্ত পরিবর্তন বাতিল করতে পারেন।


Transactional Reads:

Transactional Reads ব্যবহারের মাধ্যমে আপনি একটি বা একাধিক আইটেম (Items) পড়তে পারেন যা একযোগে ট্রানজেকশনের অংশ হবে। এর মাধ্যমে আপনি নিশ্চিত হতে পারেন যে সমস্ত রিড অপারেশন একত্রে সফল হয়েছে বা যদি কিছু কারণে অপারেশন ব্যর্থ হয়, তবে কোন পরিবর্তন ঘটবে না।

ট্রানজেকশনাল রিড উদাহরণ:

  1. অপারেশন: আপনি দুটি আইটেমকে একসাথে রিড করতে চান যেগুলি UserID এবং OrderID দিয়ে চিহ্নিত করা হয়েছে।
  2. API কল:

    aws dynamodb transact-get-items \
        --transact-items '[ 
            {
                "Get": {
                    "TableName": "Users",
                    "Key": { "UserID": { "S": "user123" } }
                }
            },
            {
                "Get": {
                    "TableName": "Orders",
                    "Key": { "OrderID": { "S": "order567" } }
                }
            }
        ]'
    
    • এই API কলটি নিশ্চিত করবে যে, উল্লিখিত দুইটি আইটেম একসাথে পড়া হয়েছে। যদি একটিও আইটেম পাওয়া না যায়, পুরো ট্রানজেকশন ব্যর্থ হবে।

Transactional Writes:

Transactional Writes এর মাধ্যমে একাধিক আইটেম একযোগে আপডেট বা ইন্সার্ট করা যায়, যেটি ACID প্রিন্সিপলে কাজ করে। যদি এক বা একাধিক রেকর্ডে কোনো সমস্যা থাকে (যেমন নির্দিষ্ট আইটেম পাওয়া না গেলে বা ব্যতিক্রম ঘটলে), তখন সমস্ত রাইট অপারেশনই বাতিল হয়ে যাবে। এর ফলে ডেটা ইনকনসিস্টেন্সি বা আংশিক আপডেট থেকে রক্ষা পাওয়া যায়।

ট্রানজেকশনাল রাইট উদাহরণ:

  1. অপারেশন: দুটি টেবিলে (একটি Users এবং একটি Orders) একযোগে রেকর্ড ইনসার্ট করতে হবে।
  2. API কল:

    aws dynamodb transact-write-items \
        --transact-items '[ 
            {
                "Put": {
                    "TableName": "Users",
                    "Item": { 
                        "UserID": { "S": "user123" }, 
                        "Name": { "S": "John Doe" } 
                    }
                }
            },
            {
                "Put": {
                    "TableName": "Orders",
                    "Item": { 
                        "OrderID": { "S": "order567" },
                        "UserID": { "S": "user123" },
                        "Amount": { "N": "150" }
                    }
                }
            }
        ]'
    
    • এই API কলটি দুটি Put অপারেশন একযোগে ট্রানজেকশন আকারে কার্যকর করবে। যদি একটি অপারেশন ব্যর্থ হয় (যেমন Users টেবিলের ইনসার্ট), তবে Orders টেবিলের ইনসার্টও বাতিল হবে। অর্থাৎ, একসাথে উভয় অপারেশনই সফল হতে হবে।

ACID Compliance:

DynamoDB Transactions ACID গুণাবলী নিশ্চিত করে:

  • Atomicity: একটি ট্রানজেকশনে সব অপারেশন একসাথে সফল হবে অথবা একেবারে বাতিল হয়ে যাবে।
  • Consistency: যদি কোনো সমস্যা হয়, তাহলে ডেটাবেস আগের স্টেটেই ফিরে যাবে।
  • Isolation: অন্যান্য অপারেশন এই ট্রানজেকশন চলাকালীন অকার্যকর হবে যতক্ষণ না ট্রানজেকশন সম্পন্ন হয়।
  • Durability: সফলভাবে সম্পন্ন হওয়া ট্রানজেকশনগুলি স্থায়ীভাবে সঞ্চিত থাকবে।

Tranactional API ব্যবহার করা:

DynamoDB এ ট্রানজেকশনাল অপারেশন করার জন্য দুটি প্রধান API রয়েছে:

  1. TransactGetItems: একাধিক আইটেম পড়ার জন্য ব্যবহৃত।
  2. TransactWriteItems: একাধিক আইটেম লিখতে বা আপডেট করতে ব্যবহৃত।

এই API গুলি একাধিক রেকর্ডের উপর পার্টিশন বা সোর্ট কী নির্ভর করে এবং একযোগে ট্রানজেকশন পরিচালনা করতে সক্ষম।


সীমাবদ্ধতা:

  • DynamoDB তে ট্রানজেকশনের জন্য একটি Max Limit রয়েছে, যেমন একটি ট্রানজেকশনে সর্বোচ্চ 25টি রিড বা রাইট অপারেশন করা যেতে পারে।
  • প্রতিটি ট্রানজেকশন 4 MB পর্যন্ত ডেটা প্রক্রিয়া করতে পারে। এর বেশি ডেটা হলে ট্রানজেকশন ব্যর্থ হবে।

উপসংহার:

Transactional Reads এবং Writes ব্যবহার করলে আপনি DynamoDB তে ডেটা পরিচালনায় একটি উচ্চমানের সুরক্ষা এবং ইন্টিগ্রিটি বজায় রাখতে পারবেন। একাধিক রেকর্ডের উপর একযোগে অপারেশন পরিচালনার জন্য এটি একটি শক্তিশালী সমাধান, বিশেষ করে যখন অ্যাপ্লিকেশনের জন্য ডেটা সঠিকতা অত্যন্ত গুরুত্বপূর্ণ।

common.content_added_by

ACID Compliance in DynamoDB

226
226

ACID (Atomicity, Consistency, Isolation, Durability) হল ডেটাবেস সিস্টেমের মৌলিক বৈশিষ্ট্যসমূহ, যা নিশ্চিত করে যে ডেটাবেস ট্রানজ্যাকশনগুলি সঠিকভাবে এবং নিরাপদভাবে সম্পন্ন হয়। AWS DynamoDB ACID বৈশিষ্ট্যগুলি নির্দিষ্ট পরিমাণে সমর্থন করে, যা ট্রানজ্যাকশনাল সিস্টেমের জন্য গুরুত্বপূর্ণ।

DynamoDB একটি NoSQL ডেটাবেস হলেও, এটি ACID compliance এর একটি নির্দিষ্ট স্তর প্রদান করে, বিশেষ করে ট্রানজেকশনাল অপারেশনের জন্য। এই অপারেশনগুলি আপনাকে একাধিক ডেটা পয়েন্ট নিয়ে একটি সম্পূর্ণ পারস্পরিক সম্পর্কিত কাজ পরিচালনা করতে দেয়, যেখানে ট্রানজেকশনটি সফলভাবে সম্পন্ন না হলে কোনও পরিবর্তন ঘটবে না।


ACID বৈশিষ্ট্যগুলি DynamoDB তে কীভাবে কাজ করে?

  1. Atomicity (আটমিকিটি):

    • Atomicity নিশ্চিত করে যে একটি ট্রানজেকশন সফলভাবে সম্পন্ন হলে সমস্ত অপারেশন হবে, অন্যথায়, কোনও অপারেশনই বাস্তবায়িত হবে না। যদি একাধিক অপারেশন থাকে (যেমন, একাধিক আইটেম ইনসার্ট, আপডেট বা ডিলিট করা), তবে যদি কোনো একটি অপারেশন ব্যর্থ হয়, তবে পুরো ট্রানজেকশন ব্যর্থ হয়ে যাবে এবং সব পরিবর্তন রোলব্যাক হবে।

    DynamoDB তে Transactional Writes এই সুবিধা প্রদান করে। আপনি একাধিক রেকর্ডের মধ্যে পারস্পরিক নির্ভরশীলতা বজায় রেখে ইনসার্ট, আপডেট বা ডিলিট করতে পারেন, এবং যদি কোন একটি অপারেশন ব্যর্থ হয়, তবে সমস্ত পরিবর্তন রোলব্যাক হবে।

    উদাহরণ:

    • একটি অ্যাকাউন্ট ডেবিট এবং ক্রেডিট করার সময়ে যদি এক অপারেশন ব্যর্থ হয়, তবে অন্যটি কার্যকর হবে না।
  2. Consistency (সঙ্গতি):

    • Consistency নিশ্চিত করে যে ডেটাবেসের সমস্ত পরিবর্তন নির্দিষ্ট নিয়মে এবং সঠিকভাবে হয়, এবং যেকোনো সময় ডেটাবেস সঠিক এবং সঙ্গতিপূর্ণ অবস্থায় থাকে।

    DynamoDB নিশ্চিত করে যে একটি ট্রানজেকশন শুরু হওয়ার পর ডেটাবেসের মান Consistency অনুযায়ী থাকবে, এমনকি একাধিক রেকর্ড পরিবর্তন বা প্রক্রিয়া করা হলে। তবে, Eventual Consistency প্রাথমিকভাবে DynamoDB তে ব্যবহৃত হলেও, ট্রানজেকশনাল API গুলি ব্যবহার করে আপনি Strong Consistency নিশ্চিত করতে পারেন।

  3. Isolation (আয়সোলেশন):

    • Isolation নিশ্চিত করে যে একাধিক ট্রানজেকশন একসাথে চলতে থাকলে একে অপরের উপর প্রভাব ফেলবে না। অর্থাৎ, একটি ট্রানজেকশন চলাকালে অন্য কোনো ট্রানজেকশন তার ডেটা পরিবর্তন করতে পারবে না, যতক্ষণ না প্রথম ট্রানজেকশন সম্পন্ন হবে।

    DynamoDB তে Isolation সাধিত হয় ট্রানজেকশন চালানোর সময়। যদি একাধিক ট্রানজেকশন একসাথে চলে, তবে তাদের মধ্যে কোনও পারস্পরিক প্রভাব পরবে না এবং তারা সম্পূর্ণ আলাদাভাবে সম্পন্ন হবে।

  4. Durability (স্থায়িত্ব):

    • Durability নিশ্চিত করে যে, একটি ট্রানজেকশন সম্পন্ন হওয়ার পর ডেটাবেসে তার পরিবর্তন স্থায়ী হয়ে থাকবে। ডেটা কোনভাবেই হারাবে না এবং যে পরিবর্তন করা হয়েছে তা মেমরি থেকে ডিস্কে স্থায়ীভাবে সংরক্ষিত থাকবে।

    DynamoDB এর মধ্যে Durability সুনিশ্চিত করা হয়, কারণ এটি Multiple Availability Zones এ ডেটা রেপ্লিকেট করে। যখন আপনি ট্রানজেকশন সম্পন্ন করেন, তখন নিশ্চিত হয় যে ডেটা স্থায়ীভাবে সঞ্চিত হয়েছে এবং তা যদি সার্ভার বা সিস্টেম ক্র্যাশ হয়, তাও তা নিরাপদ থাকবে।


DynamoDB তে ACID Transactions ব্যবহার করা

DynamoDB তে ACID-compliant transactions চালানোর জন্য, AWS একটি ট্রানজেকশনাল API প্রদান করেছে যা TransactWriteItems এবং TransactGetItems নামক দুটি প্রধান অপারেশন ধারণ করে।

TransactWriteItems:

এই অপারেশনটি একাধিক Write অপারেশনকে একসাথে একত্রিত করতে এবং একটি একক ACID ট্রানজেকশনে পরিচালনা করতে সক্ষম। এই অপারেশনটি ইনসার্ট, আপডেট, এবং ডিলিট অপারেশনগুলিকে একত্রে সম্পন্ন করে।

উদাহরণ (Python SDK):

import boto3
from botocore.exceptions import ClientError

# DynamoDB ক্লায়েন্ট তৈরি করা
dynamodb = boto3.client('dynamodb')

# ট্রানজেকশনাল লেখার জন্য আইটেম
try:
    response = dynamodb.transact_write_items(
        TransactItems=[
            {
                'Put': {
                    'TableName': 'Users',
                    'Item': {
                        'UserID': {'S': '12345'},
                        'Name': {'S': 'John Doe'},
                        'Age': {'N': '30'}
                    }
                }
            },
            {
                'Update': {
                    'TableName': 'Accounts',
                    'Key': {
                        'AccountID': {'S': 'A123'}
                    },
                    'UpdateExpression': 'SET Balance = Balance - :amount',
                    'ExpressionAttributeValues': {
                        ':amount': {'N': '100'}
                    }
                }
            }
        ]
    )
    print("Transaction successful!")
except ClientError as e:
    print(f"Error: {e}")

TransactGetItems:

এই অপারেশনটি একাধিক Get অপারেশনকে একত্রিত করে এবং ডেটা একসাথে রিটার্ন করে, যা একটি ACID ট্রানজেকশন হিসেবে কাজ করে।


সারাংশ

  • DynamoDB সম্পূর্ণ ACID-compliant নয়, তবে এটি Transactional Writes এবং Transactional Reads এর মাধ্যমে ACID গুণাবলী প্রদান করে, যা উচ্চ পরিমাণের ডেটা ট্রানজেকশন এবং একাধিক ডেটা রেকর্ডের উপর পারস্পরিক নির্ভরশীলতা বজায় রাখে।
  • TransactWriteItems এবং TransactGetItems অপারেশনগুলো ACID গুণাবলী নিশ্চিত করে এবং আপনার অ্যাপ্লিকেশনে ডেটার সঙ্গতি, আয়সোলেশন এবং স্থায়িত্ব নিশ্চিত করে।
  • Consistency এর জন্য DynamoDB ইভেন্টুয়াল কনসিস্টেন্সি ব্যবহার করে তবে Strong Consistency প্রয়োজন হলে এটি ট্রানজেকশনাল API দিয়ে সম্ভব।

ACID এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনে আরও নির্ভরযোগ্য এবং সঠিক ডেটাবেস ট্রানজেকশন গঠন করতে পারেন।

common.content_added_by

Transactional API ব্যবহার করা

226
226

Amazon DynamoDB Transactional API আপনাকে ACID (Atomicity, Consistency, Isolation, Durability) গুণাবলী সহ ট্রানজেকশন পরিচালনা করার সুযোগ দেয়। এটি আপনাকে একাধিক রিড এবং রাইট অপারেশন একসাথে একটি ইউনিট হিসেবে সম্পাদন করার অনুমতি দেয়, যেখানে সমস্ত অপারেশন সফল হলে একযোগে কমিট হবে এবং যদি কোন সমস্যা হয়, তাহলে সবকিছু রোলব্যাক হবে।

DynamoDB এর ট্রানজেকশনাল API ব্যবহার করে আপনি দুই ধরনের অপারেশন পরিচালনা করতে পারবেন:

  • Transactional Writes (লিখা অপারেশন)
  • Transactional Reads (পড়া অপারেশন)

এটি বিশেষভাবে তখনই উপকারী যখন আপনি একাধিক টেবিলে বা আইটেমে একযোগে রিড এবং রাইট অপারেশন করতে চান এবং আপনি চান যে, সমস্ত অপারেশন একসাথে সম্পন্ন হবে অথবা কোন একটিও হবে না।


Transactional API এর ব্যবহার:

1. Transactional Write

Transactional write অপারেশন ব্যবহার করে আপনি একাধিক আইটেম বা টেবিলের মধ্যে ডেটা লিখতে পারেন এবং একযোগে সকলটি সফল হলে কমিট হয়। যদি কোন সমস্যা হয়, তাহলে পুরো ট্রানজেকশন রোলব্যাক হবে।

উদাহরণ (Python - Boto3):

import boto3
from botocore.exceptions import ClientError

# DynamoDB client তৈরি
dynamodb = boto3.client('dynamodb')

# ট্রানজেকশনাল write operation
try:
    response = dynamodb.transact_write_items(
        TransactItems=[
            {
                'Put': {
                    'TableName': 'Table1',
                    'Item': {
                        'PartitionKey': {'S': 'value1'},
                        'SortKey': {'S': 'value2'},
                        'Attribute1': {'S': 'value3'}
                    }
                }
            },
            {
                'Put': {
                    'TableName': 'Table2',
                    'Item': {
                        'PartitionKey': {'S': 'value4'},
                        'SortKey': {'S': 'value5'},
                        'Attribute2': {'S': 'value6'}
                    }
                }
            }
        ]
    )
    print("Transaction Successful:", response)
except ClientError as e:
    print("Transaction Failed:", e)

এই কোডে দুটি টেবিলে (Table1 এবং Table2) ডেটা একসাথে লেখা হচ্ছে। যদি একটি টেবিলের রাইট অপারেশন ব্যর্থ হয়, তাহলে আরেকটি টেবিলের রাইট অপারেশনও রোলব্যাক হয়ে যাবে।


2. Transactional Read

Transactional read অপারেশন ব্যবহার করে আপনি একাধিক আইটেম একসাথে পড়তে পারেন এবং আপনি নিশ্চিত করতে পারবেন যে, সমস্ত আইটেমগুলি একই কনসিস্টেন্ট স্টেট থেকে আসবে। ট্রানজেকশনাল রিড অপারেশন শুধুমাত্র Read Consistent (যেমন টেবিলের লেটেস্ট ডেটা) রিটার্ন করে।

উদাহরণ (Python - Boto3):

import boto3
from botocore.exceptions import ClientError

# DynamoDB client তৈরি
dynamodb = boto3.client('dynamodb')

# ট্রানজেকশনাল read operation
try:
    response = dynamodb.transact_get_items(
        TransactItems=[
            {
                'Get': {
                    'TableName': 'Table1',
                    'Key': {
                        'PartitionKey': {'S': 'value1'},
                        'SortKey': {'S': 'value2'}
                    }
                }
            },
            {
                'Get': {
                    'TableName': 'Table2',
                    'Key': {
                        'PartitionKey': {'S': 'value4'},
                        'SortKey': {'S': 'value5'}
                    }
                }
            }
        ]
    )
    print("Transaction Successful:", response)
except ClientError as e:
    print("Transaction Failed:", e)

এই কোডে দুটি টেবিল থেকে ডেটা পড়া হচ্ছে এবং ট্রানজেকশনাল ভাবে নিশ্চিত করা হচ্ছে যে, দুটি আইটেমই একসাথে একসাথে পাওয়া যাবে, এবং ডেটা কনসিস্টেন্ট থাকবে।


ACID গুণাবলী

DynamoDB ট্রানজেকশনাল API ACID গুণাবলী বজায় রাখে:

  1. Atomicity (অ্যাটমিকতা): ট্রানজেকশন এর সমস্ত অপারেশন একযোগে কমিট হবে বা একটিও হবে না। যদি একটিও অপারেশন ব্যর্থ হয়, তাহলে সব অপারেশন রোলব্যাক হবে।
  2. Consistency (সঙ্গতি): ট্রানজেকশনাল অপারেশনগুলো সম্পাদনের পর ডেটাবেসে সঙ্গতিপূর্ণ স্টেট থাকবে।
  3. Isolation (আইসোলেশন): একাধিক ট্রানজেকশন একে অপরের উপর প্রভাব ফেলবে না। প্রতিটি ট্রানজেকশন নিজস্ব ভাবে সম্পন্ন হবে।
  4. Durability (স্থায়িত্ব): ট্রানজেকশন সফল হলে, তার ডেটা স্থায়ীভাবে ডেটাবেসে সংরক্ষিত হবে।

ফায়দা:

  • ACID গুণাবলী: ডেটা নিরাপত্তা এবং সঙ্গতি নিশ্চিত করা।
  • Multiple Tables & Items: একাধিক টেবিল এবং আইটেমে ট্রানজেকশনাল অপারেশন করতে সক্ষম।
  • Error Handling: একটি অপারেশন ব্যর্থ হলে পুরো ট্রানজেকশন রোলব্যাক হয়, ফলে ডেটা ধ্বংস বা অপ্রত্যাশিত অবস্থায় চলে না।

সীমাবদ্ধতা:

  • Price: ট্রানজেকশনাল API ব্যবহার করলে প্রতি অপারেশন বেশি খরচ হতে পারে, কারণ একাধিক অপারেশন একযোগে সম্পাদিত হয়।
  • পারফরম্যান্স: ট্রানজেকশনাল অপারেশন কিছুটা সময় নিতে পারে, বিশেষ করে যদি বড় স্কেল অপারেশন হয়।

উপসংহার:

DynamoDB এর Transactional API একটি শক্তিশালী টুল যা নিশ্চিত করে যে একাধিক রিড ও রাইট অপারেশনগুলো ACID গুণাবলী বজায় রেখে একসাথে সম্পাদিত হবে। এটি একাধিক টেবিল এবং আইটেমে ডেটা ম্যানিপুলেট করার জন্য অত্যন্ত উপকারী, বিশেষ করে যখন আপনাকে ডেটার কনসিস্টেন্সি এবং একটিভিটি নিশ্চিত করতে হয়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion